'use strict';

// 加载formSelects
layui.config({
    base: '/Public/layui-formSelects/dist/'
}).extend({
    formSelects: 'formSelects-v4'
});

layui.use(['form', 'element', 'layer', 'jquery', 'laytpl', 'formSelects'], function () {
	var form = layui.form(),
	    element = layui.element(),
	    layer = layui.layer,
	    $ = layui.jquery,
	    laytpl = layui.laytpl,
        formSelects = layui.formSelects;


    // 执行渲染, 把原始select美化
    formSelects.render('cc');

	// +----------------------------------------------------------------------
	// | 渲染评审人模板 - start
	// +----------------------------------------------------------------------

	var fields = void 0;

	// 渲染到模板中的数据
	var data = {
		auditID: 'Audit',
		ccID: 'Cc',
		title: '',
		attachment: [],
		selected: [], // 选中的评审人
		cc_selected: [], // 选中的抄送人
		result: null
	};

	$.post('/Approval/getUsersByDepartment', {}, function (response) {
		data.result = response;
		if ($('#template').length) {
            renderTemplate('template', 'chooseUser', data.result);
		}
		if ($('#cc-template').length) {
            renderTemplate('cc-template', 'chooseCcUser', data.result);
		}
	}, 'json');

	// 如果用户存在历史审批记录则将审批人和抄送人加载到可视区
	// 当页面被初始化时执行一次渲染
	// 初始化modal窗口内数据模板
	if ("undefined" != typeof _selected) {
		data.selected = _selected;
	}
	if ("undefined" != typeof _cc_selected) {
		data.cc_selected = _cc_selected;
	}

	if ($('#approval').length){
        renderTemplate('approval', 'approval-vector', data.selected);
	}
	if ($('#cc-approval').length) {
        renderTemplate('cc-approval', 'cc-approval-vector', data.cc_selected);
	}

	/**
     * 渲染页面显示的审核人/抄送人数据信息
     * 无论用户是添加评审人还是移除评审人/抄送人都应该重新渲染
     */
	function renderTemplate(template, vector, data) {
		// 获取模板内容
		var tplContent = document.getElementById(template).innerHTML;
		// 渲染模板内容
		laytpl(tplContent).render(data, function (render) {
			// 渲染在页面上，为保证渲染结果样式的正确性渲染完成之后应当初始化element
			if ($('#' + vector).length) {
                $('#' + vector).html(render);
                element.init();
			}
		});
	}

    if ($('#approval').length) {
        addOrRemoveUser('audit', '.ad-apr-box', 'CHOOSE_USER', '选择审核人', '#chooseUser');
    }
    if ($('#cc-approval').length) {
        addOrRemoveUser('cc', '.cc-ad-apr-box', 'CC_CHOOSE_USER', '选择抄送人', '#chooseCcUser');
    }

	function addOrRemoveUser(against, className, id, title, contentId) {
		$(className).on('click', '.add-apr', function () {
			var apLen = $(className + ' .add-apr').length;
			// 获取当前点击元素的索引
			var _curIndex = parseInt($(this).index() + 1);
			if (_curIndex == apLen) {
				// 如果当前索引等于审核人个数说明是添加审核人
				layer.open({
					id: id,
					type: 1,
					title: title,
					area: ['100%', '100%'], //宽高
					content: $(contentId).html()
				});
				element.init();
			} else {
				var key = $(this).attr('key');
				if (against == 'audit') {
					data.selected.splice(key, 1);
					if ($('#approval').length) {
                        renderTemplate('approval', 'approval-vector', data.selected);
					}
				} else {
					data.cc_selected.splice(key, 1);
                    if ($('#cc-approval').length) {
                        renderTemplate('cc-approval', 'cc-approval-vector', data.cc_selected);
                    }
				}
			}
		});
	}

	/**
     * 当用户选择人员后，将评审人添加到选中并重新渲染显示结果
     * dpmtKey,usKey分别代表用户所在的部门或组内索引
     * 根据对应的索引获取到用户数据并添加到选中
     * 调用renderApprovalUsers()方法重新渲染选中的评审人显示结果
     */
	addUserToColumn('audit', 'CHOOSE_USER');
	addUserToColumn('cc', 'CC_CHOOSE_USER');

	function addUserToColumn(against, id) {
		$(document).on('click', '#' + id + ' .us-box', function () {
			var dpmtkey = $(this).attr('dpmtKey');
			var usKey = $(this).attr('usKey');
			var user = data.result[dpmtkey].users[usKey]; // 获取到点击的用户数据
			var flag = true; // 检测用户是否重复添加标志
			if (against == 'audit') {
				if (data.selected.length) {
					for (var key in data.selected) {
						// 如果选中数据中已经存在当前选择人则直接退出
						if (data.selected[key].id == user.id) {
							flag = false;
							break;
						}
					}
				}
			} else {
				if (data.cc_selected.length) {
					for (var _key in data.cc_selected) {
						// 如果选中数据中已经存在当前选择人则直接退出
						if (data.cc_selected[_key].id == user.id) {
							flag = false;
							break;
						}
					}
				}
			}
			// 存在重复数据告知用户
			if (!flag) {
				layer.msg(user.nickname + '已存在', { icon: 2, time: 1500 });
				return false;
			}
			if (against == 'audit') {
				data.selected.push(user);
				if ($('#approval').length) {
                    renderTemplate('approval', 'approval-vector', data.selected);
				}
			} else {
				data.cc_selected.push(user);
				if ($('#cc-approval').length) {
                    renderTemplate('cc-approval', 'cc-approval-vector', data.cc_selected);
				}
			}
			layer.closeAll();
		});
	}

	// +----------------------------------------------------------------------
	// | 渲染评审人模板 - end
	// +----------------------------------------------------------------------

	form.on('submit(approval)', function (data) {
		fields = data.field;
		submitFormData();
	});

	function submitFormData() {
		if (!data.selected.length) {
			layer.msg('请选择审核人', { icon: 2, time: 1500 });
			return;
		}
		// 删除webuploader生成的file字段，不需要提交，将附件集成在attachment字段中
		delete fields.file;
		fields.attachment = data.attachment;

		fields.auditors = data.selected;
		// 如果cc_compliance_users曾被定义则说明该审批类型存在审批抄送规则，在存在规则的情况下不添加历史记录的抄送人
		if (typeof cc_compliance_users == 'undefined') {
            fields.cc = data.cc_selected;
		}
		var loading = layer.load(2, {
			shade: [0.5, '#fff'] //0.5透明度的白色背景
		});
		$.post('/Approval/store', fields, function (response) {
			var url = '/Approval/show?id=' + response.id;
			notification(response.msg, response.errno, url);
		});
	}

	/**
     * webuploader参数配置
     * @type {{auto: boolean, server: string, pick: {id: string, multiple: boolean}, fileVal: string, accept: {title: string, multi: boolean, extensions: string}, method: string}}
     */
	var WebUploaderOptions = {
		auto: true,
		server: '/Approval/upload',
		pick: {
			id: '#FilePick',
			multiple: false
		},
		fileVal: 'Filedata',
		accept: {
			title: 'file',
			multi: false,
			extensions: 'zip,rar,jpg,png,jpeg,doc,docx,xls,xlsx,pdf,ppt,pptx'
		},
		method: 'POST'
	};

	// 实例化uploader
	var FileUploader = WebUploader.create(WebUploaderOptions);

	// 上传错误时
	FileUploader.on('error', function (code) {
		var msg = '';
		switch (code) {
			case 'Q_EXCEED_NUM_LIMIT':
				msg = '只能上传一个文件';
				break;
			case 'Q_EXCEED_SIZE_LIMIT':
				msg = '文件大小超出限制';
				break;
			case 'Q_TYPE_DENIED':
				msg = '文件格式不允许';
				break;
			case 'F_DUPLICATE':
				msg = '文件已存在';
				break;
			default:
				msg = code;
		}
		layer.msg(msg, { icon: 2, time: 2000 });
	});

	// 上传之前
	FileUploader.on('uploadBeforeSend', function (block, data, headers) {
		//loading层
		// var loading = layer.load(1, {
		//     shade: [0.5, '#fff'] //0.5透明度的白色背景
		// });
	});

	// 上传成功时
	FileUploader.on('uploadSuccess', function (file, response) {
		if (response) {
			data.attachment.push({
				path: response.data.path,
				name: response.data.name,
				ext: response.data.ext
			});
			var fileItem = '<div class="file-item" id="' + file.id + '">' + '<div class="pull-left"><i class="file-icon file-icon-ext-' + file.ext + '"></i> ' + file.name + '</div>' + '<div class="pull-right"><i class="icon-remove" title="移除该文件"></i></div>' + '<div class="clearfix"></div>' + '</div>';
			$(WebUploaderOptions.pick.id).next().append(fileItem);
		}
	});

	// 删除队列文件
	$(document).on('click', '.uploader-attachment-queue .icon-remove', function () {
		var id = $(this).parent().parent().attr('id');
		// console.log(FileUploader.getFiles().length);
		// 删除队列中的文件
		FileUploader.removeFile(id, true);
		// console.log(FileUploader.getFiles().length);
		// 删除dom节点
		$(this).parent().parent().remove();
	});
});